/**
 * 第4章 面向切面的Spring之4.3 使用注解创建切面
 * 代码清单-p1ch04a-108页a：代表任何类型的现场表演，如舞台剧、电影或音乐会 {@link top.kaoshanji.p1ch04a.Performance}
 * 代码清单-p1ch04a-111页a：通过@Pointcut注解声明频繁使用的切点表达式 {@link top.kaoshanji.p1ch04a.Audience}
 * 代码清单-p1ch04a-113页a：在JavaConfig中启用AspectJ注解的自动代理 {@link top.kaoshanji.p1ch04a.PerformanceConfig}
 * 代码清单-p1ch04a-113页b：将切面Audience定义为一个bean {@link top.kaoshanji.p1ch04a.PerformanceConfig#audience()}
 * 代码清单-p1ch04a-114页a：使用环绕通知重新实现Audience切面 {@link top.kaoshanji.p1ch04a.Audience#watchPerformance(org.aspectj.lang.ProceedingJoinPoint)}
 * 代码清单-p1ch04a-115页a：通过参数化的通知来记录磁道播放的次数 {@link top.kaoshanji.p1ch04a.params.TrackCounter}
 * 代码清单-p1ch04a-117页a：配置TrackCounter记录每个磁道播放的次数 {@link top.kaoshanji.p1ch04a.params.TrackCounterConfig}
 * 代码清单-p1ch04a-119页a：为所有Performance的实现引入的接口 {@link top.kaoshanji.p1ch04a.Encoreable}
 * 代码清单-p1ch04a-120页a：为目标对象增加功能的切面 {@link top.kaoshanji.p1ch04a.EncoreableIntroducer}
 * 代码清单-p1ch04a-120页b：将切面EncoreableIntroducer定义为一个bean {@link top.kaoshanji.p1ch04a.PerformanceConfig#encoreableIntroducer()}
 * @author kaoshanji
 * ^_^
 * create time 2025/4/23 15:32
 */
package top.kaoshanji.p1ch04a;